package com.company.ljh.easy;
/**
 * 在一个长度为 n 的数组 nums 里的所有数字都在 0～n-1 的范围内。数组中某些数字是重复的，但不知道有几个数字重复了，也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/6/7 9:21
 * @version:1.0
 */
public class 数组中重复的数字 {
    /**
     * 通过交换法，将数字放到对于的数组小标位置，时间复杂度O（n），空间复杂度1
     * @param nums
     * @return
     */
    public int findRepeatNumber(int[] nums) {
        for(int i =0;i<nums.length;i++){
            if ( i == nums[i]){
                continue;
            }else
            if(nums[nums[i]] == nums[i]){
                return nums[i];
            } else{
                //交换位置
                int temp = nums[nums[i]];
                nums[nums[i]] = nums[i];
                nums[i] = temp;
                i--;
            }
        }
        return -1;
    }
}
